home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d927.lha / Ftp / src / amiga.c next >
C/C++ Source or Header  |  1993-10-07  |  2KB  |  110 lines

  1. #ifdef AMI_TCP
  2. #include <bsdsocket.h>
  3. #else
  4. #include <ss/socket.h>
  5. #endif
  6. #include <sys/types.h>
  7. #include <signal.h>
  8. #include <exec/libraries.h>
  9. #include <dos/dosextens.h>
  10. #include <dos/dos.h>
  11. #include <clib/dos_protos.h>
  12. #ifdef __SASC
  13. #include <string.h> /* for bzero, to make FD_ZERO work */
  14. #endif
  15.  
  16. #include <sys/time.h>
  17.  
  18. int sgetc(int sock)
  19. {
  20.     unsigned char c;
  21.     fd_set rd,ex;
  22.     long flgs;
  23.     int n;
  24.  
  25.     struct timeval t;
  26.     t.tv_sec = 10L;
  27.     t.tv_usec = 0;
  28.  
  29.     FD_ZERO(&rd);
  30.     FD_ZERO(&ex);
  31.  
  32.     FD_SET(sock,&rd);
  33.     FD_SET(sock,&ex);
  34.     flgs = SIGBREAKF_CTRL_D;
  35.     
  36. #ifdef AMI_TCP
  37.     WaitSelect(16,&rd,0L,&ex,&t,&flgs);
  38. #else
  39.     selectwait(16,&rd,0L,&ex,&t,&flgs);
  40. #endif
  41.     if (FD_ISSET(sock,&rd))
  42.     {    n = recv(sock, &c, 1, 0);
  43.         if (n == 1)
  44.             return c;
  45.         else return -1;
  46.     }
  47.  
  48.     else return -1;
  49. }
  50.  
  51. /* 
  52.  * This getenv and setenv will use the WB2.0 calls if you have the new
  53.  * rom. If not, it resorts to looking in the ENV: directory. 
  54.  */
  55.  
  56. extern struct DosLibrary *DOSBase;
  57.  
  58. extern char *getenv();
  59.  
  60. char *mygetenv (name)
  61.     register const char *name;
  62. {
  63.     static char value[256];
  64.  
  65.     /* 2.0 style? */
  66.     if (DOSBase->dl_lib.lib_Version >= 36) {
  67.         if (GetVar ((char *)name,value,256,0L) == -1) {
  68.             return 0;
  69.         } else {
  70.             return value;
  71.         }
  72.     } else {
  73.         return getenv(name);
  74.     }
  75. }
  76.  
  77. mygettimeofday(struct timeval *tp, struct timezone *tzp)
  78. {
  79.     struct DateStamp ds;
  80.  
  81.     DateStamp(&ds);
  82.  
  83.     tp->tv_sec = (ds.ds_Days * 60 * 24 + ds.ds_Minute )* 60 +
  84.         ds.ds_Tick / 50;
  85.     tp->tv_usec = (ds.ds_Tick % 50) * 20000;
  86. }
  87.  
  88. /* 
  89.  * joinpath tacks a file (or sub dir) on to the end of a directory name.
  90.  * Not just as simple as putting a '/' between the two, as the directory
  91.  * name may be an assign! 
  92.  */
  93.  
  94. void joinpath (str, dir, file)
  95.     char *str, *dir, *file;
  96. {    
  97.     char c;
  98.  
  99.     if (strlen (dir) == 0) {
  100.         strcpy (str, file);
  101.         return;
  102.     }
  103.     c = dir[strlen(dir)-1];
  104.     if (c=='/' || c==':') {
  105.         sprintf (str, "%s%s", dir, file);
  106.     } else {
  107.         sprintf (str, "%s/%s", dir, file);
  108.     }    
  109. }
  110.